package net.wanglu.www.spdr.rule;

import java.util.HashMap;
import java.util.regex.Pattern;

/**
 * 声明BBC站点的主页链接、页面字符编码、主页中的有效链接、有效内容、
 * 有效内容标题、有效内容正文的规则
 * @author deadspace
 *
 */
public class BBCRule implements Rule {

	/**
	 * BBC站点中，表示标签的class属性
	 */
	public static final String TAG_ATTR_CLASS = "class";
	/**
	 * BBC站点中，表示标签的id属性
	 */
	public static final String TAG_ATTR_ID = "id";
	/**
	 * BBC站点中，表示标签的name属性
	 */
	public static final String TAG_ATTR_NAME = "name";
	/**
	 * BBC站点中，表示标签的content属性
	 */
	public static final String TAG_ATTR_CONTENT = "content";
	/**
	 * BBC站点中有效链接的命名规则
	 */
	@Override
	public Pattern validUrlRule() throws Exception {
		String regex = "(([a-z]+-)+\\d{8}|sport/\\d/[a-z]+/\\d{8})";
		Pattern pattern = Pattern.compile(regex);
		return pattern;
	}
	/**
	 * BBC站点中含有有效内容正文的标签的规则。BB中的正文都在若干个
	 * 段落标签中，该段落标签的父标签的特征是class属性的值等于
	 * story-body。
	 */
	@Override
	public HashMap<String, String> textTagRule() throws Exception {
		// TODO Auto-generated method stub
		HashMap<String, String> map = new HashMap<String, String>(4);
		map.put(Rule.SON+Rule.ELEMENT_NAME, "p");
		map.put(Rule.FATHER+BBCRule.TAG_ATTR_CLASS, "story-body");
		return map;
	}
	/**
	 * BBC站点中有关体育方面的有效内容正文，也都在若干个段落标签中，
	 * 但这些段落标签的父标签的class属性值等于article。
	 * @return
	 * @throws Exception
	 */
	public HashMap<String, String> sportTextTagRule() throws Exception {
		HashMap<String, String> map = new HashMap<String, String>(4);
		map.put(Rule.SON+Rule.ELEMENT_NAME, "p");
		map.put(Rule.FATHER+BBCRule.TAG_ATTR_CLASS, "article");
		return map;		
	}
	/**
	 * BBC站点中含有有效内容的标签的规则是其class属性值等于story-body
	 */
	@Override
	public HashMap<String, String> targetTagRule() throws Exception {
		// TODO Auto-generated method stub
		HashMap<String, String> map = new HashMap<String, String>(4);
		map.put(BBCRule.TAG_ATTR_CLASS, "story-body");
		return map;
	}
	/**
	 * BBC站点中含有有效内容标题的标签的规则，该规则是该标签的class属性值
	 * 等于story-header。
	 */
	@Override
	public HashMap<String, String> titleTagRule() throws Exception {
		// TODO Auto-generated method stub
		HashMap<String, String> map = new HashMap<String, String>(4);
		map.put(BBCRule.TAG_ATTR_CLASS, "story-header");
		return map;		
	}
	/**
	 * BBC站点中含有有效内容发布日期的标签的规则，该规则是该标签的class属性值
	 * 等于date。
	 */
	@Override
	public HashMap<String, String> dateTagRule() throws Exception {
		// TODO Auto-generated method stub
		HashMap<String, String> map = new HashMap<String, String>(4);
		map.put(BBCRule.TAG_ATTR_CLASS, "date");
		return map;
	}
	/**
	 * BBC站点中含有有效内容摘要的标签的规则，该规则是该标签的id属性值等于story_continues_1。
	 */
	@Override
	public HashMap<String, String> abstractTagRule() throws Exception {
		// TODO Auto-generated method stub
		HashMap<String, String> map = new HashMap<String, String>(4);
		map.put(BBCRule.TAG_ATTR_ID, "story_continues_1");
		return map;
	}
	/**
	 * BBC站点主页的url
	 */
	@Override
	public String homeUrl() throws Exception {
		// TODO Auto-generated method stub
		return "http://www.bbc.co.uk";
	}
	/**
	 * BBC站点页面的字符编码
	 */
	@Override
	public String charSet() throws Exception {
		// TODO Auto-generated method stub
		return "UTF-8";
	}
	@Override
	public HashMap<String, String> crossHeadTagRule() throws Exception {
		// TODO Auto-generated method stub
		HashMap<String, String> map = new HashMap<String, String>(4);
		map.put(BBCRule.TAG_ATTR_ID, "cross-head");
		return map;
	}
	@Override
	public HashMap<String, String> authorTagRule() throws Exception {
		// TODO Auto-generated method stub
		return null;
	}
	@Override
	public Pattern rejectedUrlRule() throws Exception {
		String regex = "radio-and-tv|china";
		Pattern pattern = Pattern.compile(regex);
		return pattern;
	}
	
	public HashMap<String, String> urlTagRule() throws Exception {
		HashMap<String, String> map = new HashMap<String, String>(4);
		map.put(BBCRule.TAG_ATTR_NAME, "UKFS_URL");
		return map;
	}
}
